home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / CC_C / 0574.ZIP / FRDWR.ASM < prev    next >
Assembly Source File  |  1986-12-05  |  1KB  |  76 lines

  1. include compiler.inc
  2.  
  3.     ttl    FRDWR, 1.06, 11-20-86, cr
  4.  
  5. ;stream read
  6.  
  7.     dseg
  8.     cseg
  9.     xtfs    <write,read,$strhand>
  10.  
  11.     procdef    fread, <<bfadr, ptr>, <elsiz, word>, <elcount, word>, <strm, ptr>>
  12.     mov    si,1            ;set READ flag
  13.     jmp    short start
  14.  
  15.     entrdef    fwrite
  16.     xor    si,si            ;set WRITE flag
  17.  
  18. start:
  19.     pushreg
  20.     pushds
  21.  
  22.     push    si            ;save flag
  23.     mov    si, elcount        ;nbr elements
  24.     mov    ax, elsiz        ;element size
  25.     cwd
  26.     mul    si
  27.     mov    di, ax            ;save bytes to read or write
  28.     pop    si            ;restore flag
  29.  
  30.     callit    $strhand <<strm, ptr>>
  31.     inc    ax
  32.     jz    nodv2
  33.     dec    ax
  34.     mov    dl, 10h            ;error code
  35.  
  36.     or    si,si
  37.     jnz    rd
  38.  
  39. wr:
  40.     test    bl, 2            ;open for writing?
  41.     jz    seterr
  42.     callit    write,<<di,reg>,<bfadr,ptr>,<ax,reg>>
  43.     jmp    short back
  44.  
  45. rd:
  46.     test    bl, 1            ;open for reading?
  47.     jz    seterr
  48.     callit    read,<<di,reg>,<bfadr,ptr>,<ax,reg>>
  49.  
  50. back:
  51.  
  52.     mov    dl, 08h
  53.     or    ax, ax            ;if zero, EOF
  54.     jz    seterr
  55.     inc    ax            ; if -1, ERROR
  56.     or    dl, 10h
  57.     or    ax, ax
  58.     jz    seterr
  59.     dec    ax
  60. ;
  61.     mov    si, elsiz        ;element size
  62.     cmp    si, 1
  63.     jbe    nodv2
  64.     cwd
  65.     idiv    si
  66.     jmp    short nodv2
  67.  
  68. seterr:
  69.     ldptr    si, strm
  70.     or    byte ptr 2[si], dl    ; set error or EOF code
  71.     mov    ax, -1
  72. nodv2:
  73.     pret                ;return # of elements
  74.     pend    fread
  75.     finish
  76.